import 'dart:math';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app/generated/i18n.dart';
import 'package:flutter_app/store/index.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';

import '../page_index.dart';

/// 根据Android或IOS显示不同风格dialog
///
Future<Null> showDiffDialog(BuildContext context,
    {Widget title,
    Widget content,
    String yesText,
    String noText,
    EdgeInsetsGeometry titlePadding,
    EdgeInsetsGeometry contentPadding =
        const EdgeInsets.fromLTRB(24.0, 20.0, 24.0, 24.0),
    Function pressed,
    Function cancelPressed}) async {
  await showDialog(
    context: context,
    builder: (context) => Utils.isAndroid
        ? AlertDialog(
            title: title,
            titlePadding: titlePadding,
            content: content,
            contentPadding: contentPadding,
            actions: <Widget>[
              FlatButton(
                onPressed: cancelPressed ?? () => Navigator.pop(context),
                child: Text(noText ??= S.of(context).cancel),
              ),
              FlatButton(
                onPressed: () => pressed(),
                child: Text(yesText ??= S.of(context).sure),
              )
            ],
          )
        : CupertinoAlertDialog(
            title: title,
            content: Padding(
              padding: const EdgeInsets.only(top: 20.0),
              child: content,
            ),
            actions: <Widget>[
              CupertinoDialogAction(
                onPressed: cancelPressed ?? () => Navigator.pop(context),
                child: Text(noText ??= S.of(context).cancel),
              ),
              CupertinoDialogAction(
                onPressed: () => pressed(),
                child: Text(yesText ??= S.of(context).sure),
              )
            ],
          ),
  );
}

/// 歌曲播放列表
///
/// [context] 上下文
///
void showMusicListBottomSheet(BuildContext context) {
  showModalBottomSheet(
    context: context,
    isScrollControlled: true,
    backgroundColor: Colors.white,
    builder: (BuildContext context) => Store.connect<MusicModel>(
      builder: (_, MusicModel snapshot, __) => Container(
        height: Utils.height * 2 / 3,
        child: Column(
          children: <Widget>[
            Container(
              padding: EdgeInsets.all(10.0),
              child: Row(
                children: <Widget>[
                  Icon(snapshot.modeIcon),
                  Gaps.hGap10,
                  RichText(
                    textAlign: TextAlign.left,
                    text: TextSpan(
                      children: [
                        TextSpan(
                            text: snapshot.mode == 0
                                ? '顺序播放'
                                : snapshot.mode == 1 ? "随机播放" : "单曲循环",
                            style: TextStyles.textBlue16),
                        TextSpan(
                            text: '（共${snapshot.allSongs.length}首）',
                            style: TextStyles.textBlue14),
                      ],
                    ),
                  ),
                ],
              ),
            ),
            Container(height: 1, color: Colors.grey),
            Expanded(
              child: ListView.separated(
                itemBuilder: (_, index) {
                  bool isPlaying = snapshot.curIndex == index;
                  return ListTile(
                      leading: ImageLoadView(
                          '${snapshot.allSongs[index].albumArtUrl}',
                          width: isPlaying ? 50 : 40,
                          height: isPlaying ? 50 : 40,
                          borderRadius: BorderRadius.all(Radius.circular(25.0)),
                          child: isPlaying
                              ? Container(
                                  width: isPlaying ? 50 : 40,
                                  height: isPlaying ? 50 : 40,
                                  child: CircularProgressIndicator(
                                      value: snapshot.progress,
                                      valueColor: AlwaysStoppedAnimation<Color>(
                                          Colors.redAccent)),
                                )
                              : null),
                      title: Text('${snapshot.allSongs[index].title}',
                          maxLines: 1),
                      subtitle: Text('${snapshot.allSongs[index].artists}',
                          maxLines: 1),
                      onTap: () {
                        Navigator.pop(context);
                        snapshot.playSongByIndex(index);
                      },
                      selected: isPlaying);
                },
                itemCount: snapshot.allSongs.length,
                separatorBuilder: (BuildContext context, int index) =>
                    Container(height: 0.1, color: Colors.grey),
              ),
            ),
          ],
        ),
      ),
    ),
  );
}

showLoginDialog(BuildContext context) async {
  showDialog<Null>(
      context: context, //BuildContext对象
      barrierDismissible: false,
      builder: (BuildContext context) {
        return LoginDialog();
      });
}

class LoginDialog extends Dialog {
  LoginDialog({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Material(
      type: MaterialType.transparency,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Container(
            width: 320,
            height: 430,
            decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(6)),
            ),
            child: OverflowBox(
              alignment: Alignment.bottomCenter,
              maxHeight: 515,
              child: Stack(
                alignment: AlignmentDirectional.topCenter,
                children: <Widget>[
                  Positioned(
                    child: ImageLoadView(
                      'https://raw.githubusercontent.com/yukilzw/dy_flutter/master/images/login/syn.webp',
                      height: 180.0,
                      fit: BoxFit.fitHeight,
                    ),
                  ),
                  Positioned(
                    top: 170,
                    left: 30,
                    child: Text(
                      '登录',
                      style: TextStyle(
                        fontWeight: FontWeight.bold,
                        fontSize: 30,
                      ),
                    ),
                  ),
                  Positioned(
                    top: 100,
                    right: 15,
                    child: GestureDetector(
                      child: Icon(Icons.close),
                      onTap: () => Navigator.of(context).pop(),
                    ),
                  ),
                  Padding(
                    padding: EdgeInsets.only(
                      left: 30,
                      right: 30,
                      top: 230,
                    ),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.stretch,
                      children: <Widget>[
                        Button(
                          text: '账号登录',
                          onPressed: () {
                            Navigator.of(context).pop();
                          },
                          borderRadius: 5,
                          color: Color(0xffff5d23),
                        ),
                        Padding(
                          padding: EdgeInsets.only(top: 20, bottom: 15),
                          child: Button(
                              text: '快速注册',
                              onPressed: () {
                                Navigator.of(context).pop();
                              },
                              borderRadius: 5,
                              borderColor: Color(0xffff5d23),
                              textColor: Color(0xffff5d23),
                              buttonShape: ButtonShape.OUTLINE),
                        ),
                        RichText(
                          text: TextSpan(
                            style: TextStyle(
                              color: Color(0xff999999),
                              fontSize: 12,
                              height: 1.2,
                            ),
                            children: [
                              TextSpan(
                                text: '使用即为同意',
                              ),
                              TextSpan(
                                text: '《隐私权政策》',
                                style: TextStyle(color: Color(0xffff7701)),
                              ),
                              TextSpan(
                                text: '、',
                              ),
                              TextSpan(
                                text: '《用户注册协议》',
                                style: TextStyle(color: Color(0xffff7701)),
                              ),
                              TextSpan(
                                text: '和',
                              ),
                              TextSpan(
                                text: '《用户阳光行为准则》',
                                style: TextStyle(color: Color(0xffff7701)),
                              ),
                            ],
                          ),
                        ),
                        LineViewLine(
                          lineColor: Colors.black26,
                          child: Text(
                            '快速登录',
                            style: TextStyle(
                                fontSize: 15,
                                color: Color(
                                  0xff707070,
                                )),
                          ),
                          horizontalPadding: 40.0,
                          verticalPadding: 20.0,
                          lineHeight: 2.0,
                        ),
                        Material(
                          type: MaterialType.transparency,
                          child: Row(
                            mainAxisAlignment: MainAxisAlignment.spaceAround,
                            children: <Widget>[
                              IconButton(
                                  icon: Icon(
                                    FontAwesome.weixin,
                                  ),
                                  onPressed: () {}),
                              IconButton(
                                  icon: Icon(
                                    FontAwesome.qq,
                                  ),
                                  onPressed: () {}),
                              IconButton(
                                  icon: Icon(
                                    FontAwesome.weibo,
                                  ),
                                  onPressed: () {}),
                            ],
                          ),
                        )
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

showLoadingDialog(BuildContext context, String text) async {
  showDialog<Null>(
      context: context, //BuildContext对象
      barrierDismissible: false,
      builder: (BuildContext context) {
        /// 调用对话框
        return LoadingDialog(text: text);
      });
}

class LoadingDialog extends Dialog {
  final String text;

  LoadingDialog({
    Key key,
    @required this.text,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return LoadingWidget(text: text, bgColor: Colors.white);
  }
}

class LoadingWidget extends StatelessWidget {
  LoadingWidget({
    Key key,
    this.text: '加载中...',
    this.bgColor: const Color(0x4b000000),
  }) : super(key: key);

  final String text;
  final Color bgColor;

  @override
  Widget build(BuildContext context) {
    return Material(
        type: MaterialType.transparency,
        child: Center(
            child: Container(
                width: 120.0,
                height: 120.0,
                decoration: ShapeDecoration(
                    color: bgColor,
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.all(Radius.circular(8.0)))),
                child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: <Widget>[
                      Center(
                          child: loadingWidgets[
                              Random().nextInt(loadingWidgets.length - 1)]),
                      Padding(
                          padding: EdgeInsets.only(top: 20.0),
                          child: Text(text, style: TextStyles.textGrey12))
                    ]))));
  }
}
